/*
 * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.protocol;

import com.sun.corba.se.pept.protocol.ClientRequestDispatcher;

import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcherFactory;
import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher;

import com.sun.corba.se.spi.orb.ORB;

// Used only in the implementation: no client of this class ever needs these
import com.sun.corba.se.spi.ior.IOR;

import com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl;
import com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl;
import com.sun.corba.se.impl.protocol.MinimalServantCacheLocalCRDImpl;
import com.sun.corba.se.impl.protocol.InfoOnlyServantCacheLocalCRDImpl;
import com.sun.corba.se.impl.protocol.FullServantCacheLocalCRDImpl;
import com.sun.corba.se.impl.protocol.JIDLLocalCRDImpl;
import com.sun.corba.se.impl.protocol.POALocalCRDImpl;
import com.sun.corba.se.impl.protocol.INSServerRequestDispatcher;
import com.sun.corba.se.impl.protocol.BootstrapServerRequestDispatcher;

public final class RequestDispatcherDefault {
    private RequestDispatcherDefault() {
    }

    public static ClientRequestDispatcher makeClientRequestDispatcher() {
        return new CorbaClientRequestDispatcherImpl();
    }

    public static CorbaServerRequestDispatcher makeServerRequestDispatcher(ORB orb) {
        return new CorbaServerRequestDispatcherImpl((com.sun.corba.se.spi.orb.ORB) orb);
    }

    public static CorbaServerRequestDispatcher makeBootstrapServerRequestDispatcher(ORB orb) {
        return new BootstrapServerRequestDispatcher(orb);
    }

    public static CorbaServerRequestDispatcher makeINSServerRequestDispatcher(ORB orb) {
        return new INSServerRequestDispatcher(orb);
    }

    public static LocalClientRequestDispatcherFactory makeMinimalServantCacheLocalClientRequestDispatcherFactory(final ORB orb) {
        return new LocalClientRequestDispatcherFactory() {
            public LocalClientRequestDispatcher create(int id, IOR ior) {
                return new MinimalServantCacheLocalCRDImpl(orb, id, ior);
            }
        };
    }

    public static LocalClientRequestDispatcherFactory makeInfoOnlyServantCacheLocalClientRequestDispatcherFactory(final ORB orb) {
        return new LocalClientRequestDispatcherFactory() {
            public LocalClientRequestDispatcher create(int id, IOR ior) {
                return new InfoOnlyServantCacheLocalCRDImpl(orb, id, ior);
            }
        };
    }

    public static LocalClientRequestDispatcherFactory makeFullServantCacheLocalClientRequestDispatcherFactory(final ORB orb) {
        return new LocalClientRequestDispatcherFactory() {
            public LocalClientRequestDispatcher create(int id, IOR ior) {
                return new FullServantCacheLocalCRDImpl(orb, id, ior);
            }
        };
    }

    public static LocalClientRequestDispatcherFactory makeJIDLLocalClientRequestDispatcherFactory(final ORB orb) {
        return new LocalClientRequestDispatcherFactory() {
            public LocalClientRequestDispatcher create(int id, IOR ior) {
                return new JIDLLocalCRDImpl(orb, id, ior);
            }
        };
    }

    public static LocalClientRequestDispatcherFactory makePOALocalClientRequestDispatcherFactory(final ORB orb) {
        return new LocalClientRequestDispatcherFactory() {
            public LocalClientRequestDispatcher create(int id, IOR ior) {
                return new POALocalCRDImpl(orb, id, ior);
            }
        };
    }
}
